home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 60 / IOPROG_60.ISO / soft / c++ / gsl-1.1.1-setup.exe / {app} / src / cblas / test_hemm.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-04-18  |  12.2 KB  |  428 lines

  1. #include <gsl/gsl_test.h>
  2. #include <gsl/gsl_ieee_utils.h>
  3. #include <gsl/gsl_math.h>
  4. #include <gsl/gsl_cblas.h>
  5.  
  6. #include "tests.h"
  7.  
  8. void
  9. test_hemm (void) {
  10. const double flteps = 1e-4, dbleps = 1e-6;
  11.   {
  12.    int order = 101;
  13.    int side = 141;
  14.    int uplo = 121;
  15.    int M = 1;
  16.    int N = 2;
  17.    float alpha[2] = {0.0f, 0.1f};
  18.    float beta[2] = {0.0f, 0.1f};
  19.    float A[] = { -0.126f, 0.079f };
  20.    int lda = 1;
  21.    float B[] = { -0.954f, -0.059f, 0.296f, -0.988f };
  22.    int ldb = 2;
  23.    float C[] = { -0.859f, -0.731f, 0.737f, 0.593f };
  24.    int ldc = 2;
  25.    float C_expected[] = { 0.0723566f, -0.0738796f, -0.0717488f, 0.0699704f };
  26.    cblas_chemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
  27.    {
  28.      int i;
  29.      for (i = 0; i < 2; i++) {
  30.        gsl_test_rel(C[2*i], C_expected[2*i], flteps, "chemm(case 1550) real");
  31.        gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "chemm(case 1550) imag");
  32.      };
  33.    };
  34.   };
  35.  
  36.  
  37.   {
  38.    int order = 102;
  39.    int side = 141;
  40.    int uplo = 121;
  41.    int M = 1;
  42.    int N = 2;
  43.    float alpha[2] = {0.0f, 0.1f};
  44.    float beta[2] = {0.0f, 0.1f};
  45.    float A[] = { 0.652f, 0.584f };
  46.    int lda = 1;
  47.    float B[] = { -0.983f, -0.734f, -0.422f, -0.825f };
  48.    int ldb = 1;
  49.    float C[] = { 0.387f, 0.341f, -0.734f, 0.632f };
  50.    int ldc = 1;
  51.    float C_expected[] = { 0.0137568f, -0.0253916f, -0.00941f, -0.100914f };
  52.    cblas_chemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
  53.    {
  54.      int i;
  55.      for (i = 0; i < 2; i++) {
  56.        gsl_test_rel(C[2*i], C_expected[2*i], flteps, "chemm(case 1551) real");
  57.        gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "chemm(case 1551) imag");
  58.      };
  59.    };
  60.   };
  61.  
  62.  
  63.   {
  64.    int order = 101;
  65.    int side = 142;
  66.    int uplo = 121;
  67.    int M = 1;
  68.    int N = 2;
  69.    float alpha[2] = {0.0f, 1.0f};
  70.    float beta[2] = {-1.0f, 0.0f};
  71.    float A[] = { 0.78f, 0.885f, 0.507f, 0.765f, 0.911f, -0.461f, 0.707f, 0.508f };
  72.    int lda = 2;
  73.    float B[] = { -0.905f, 0.633f, 0.85f, -0.943f };
  74.    int ldb = 2;
  75.    float C[] = { 0.045f, -0.237f, 0.078f, -0.252f };
  76.    int ldc = 2;
  77.    float C_expected[] = { 0.589611f, -0.759345f, 0.960095f, -0.09013f };
  78.    cblas_chemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
  79.    {
  80.      int i;
  81.      for (i = 0; i < 2; i++) {
  82.        gsl_test_rel(C[2*i], C_expected[2*i], flteps, "chemm(case 1552) real");
  83.        gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "chemm(case 1552) imag");
  84.      };
  85.    };
  86.   };
  87.  
  88.  
  89.   {
  90.    int order = 102;
  91.    int side = 142;
  92.    int uplo = 121;
  93.    int M = 1;
  94.    int N = 2;
  95.    float alpha[2] = {0.0f, 1.0f};
  96.    float beta[2] = {-1.0f, 0.0f};
  97.    float A[] = { 0.947f, 0.939f, -0.267f, -0.819f, -0.827f, -0.937f, 0.991f, 0.838f };
  98.    int lda = 2;
  99.    float B[] = { 0.871f, -0.988f, -0.232f, -0.434f };
  100.    int ldb = 1;
  101.    float C[] = { -0.261f, 0.927f, -0.351f, -0.203f };
  102.    int ldc = 1;
  103.    float C_expected[] = { 1.0551f, 0.496359f, 0.780145f, -1.67298f };
  104.    cblas_chemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
  105.    {
  106.      int i;
  107.      for (i = 0; i < 2; i++) {
  108.        gsl_test_rel(C[2*i], C_expected[2*i], flteps, "chemm(case 1553) real");
  109.        gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "chemm(case 1553) imag");
  110.      };
  111.    };
  112.   };
  113.  
  114.  
  115.   {
  116.    int order = 101;
  117.    int side = 141;
  118.    int uplo = 122;
  119.    int M = 1;
  120.    int N = 2;
  121.    float alpha[2] = {-1.0f, 0.0f};
  122.    float beta[2] = {0.0f, 0.0f};
  123.    float A[] = { -0.593f, -0.9f };
  124.    int lda = 1;
  125.    float B[] = { -0.861f, 0.747f, -0.984f, 0.595f };
  126.    int ldb = 2;
  127.    float C[] = { -0.589f, -0.671f, -0.011f, -0.417f };
  128.    int ldc = 2;
  129.    float C_expected[] = { -0.510573f, 0.442971f, -0.583512f, 0.352835f };
  130.    cblas_chemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
  131.    {
  132.      int i;
  133.      for (i = 0; i < 2; i++) {
  134.        gsl_test_rel(C[2*i], C_expected[2*i], flteps, "chemm(case 1554) real");
  135.        gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "chemm(case 1554) imag");
  136.      };
  137.    };
  138.   };
  139.  
  140.  
  141.   {
  142.    int order = 102;
  143.    int side = 141;
  144.    int uplo = 122;
  145.    int M = 1;
  146.    int N = 2;
  147.    float alpha[2] = {-1.0f, 0.0f};
  148.    float beta[2] = {0.0f, 0.0f};
  149.    float A[] = { -0.79f, 0.132f };
  150.    int lda = 1;
  151.    float B[] = { -0.243f, -0.12f, 0.633f, -0.556f };
  152.    int ldb = 1;
  153.    float C[] = { -0.658f, -0.74f, -0.47f, 0.481f };
  154.    int ldc = 1;
  155.    float C_expected[] = { -0.19197f, -0.0948f, 0.50007f, -0.43924f };
  156.    cblas_chemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
  157.    {
  158.      int i;
  159.      for (i = 0; i < 2; i++) {
  160.        gsl_test_rel(C[2*i], C_expected[2*i], flteps, "chemm(case 1555) real");
  161.        gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "chemm(case 1555) imag");
  162.      };
  163.    };
  164.   };
  165.  
  166.  
  167.   {
  168.    int order = 101;
  169.    int side = 142;
  170.    int uplo = 122;
  171.    int M = 1;
  172.    int N = 2;
  173.    float alpha[2] = {-0.3f, 0.1f};
  174.    float beta[2] = {0.0f, 1.0f};
  175.    float A[] = { -0.114f, -0.515f, -0.513f, -0.527f, -0.995f, 0.986f, 0.229f, -0.076f };
  176.    int lda = 2;
  177.    float B[] = { 0.084f, 0.522f, 0.61f, 0.694f };
  178.    int ldb = 2;
  179.    float C[] = { 0.802f, 0.136f, -0.161f, -0.364f };
  180.    int ldc = 2;
  181.    float C_expected[] = { 0.269101f, 0.716492f, 0.237088f, 0.0290666f };
  182.    cblas_chemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
  183.    {
  184.      int i;
  185.      for (i = 0; i < 2; i++) {
  186.        gsl_test_rel(C[2*i], C_expected[2*i], flteps, "chemm(case 1556) real");
  187.        gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "chemm(case 1556) imag");
  188.      };
  189.    };
  190.   };
  191.  
  192.  
  193.   {
  194.    int order = 102;
  195.    int side = 142;
  196.    int uplo = 122;
  197.    int M = 1;
  198.    int N = 2;
  199.    float alpha[2] = {-0.3f, 0.1f};
  200.    float beta[2] = {0.0f, 1.0f};
  201.    float A[] = { 0.798f, -0.324f, -0.693f, -0.893f, -0.223f, 0.749f, 0.102f, -0.357f };
  202.    int lda = 2;
  203.    float B[] = { -0.572f, -0.569f, -0.391f, -0.938f };
  204.    int ldb = 1;
  205.    float C[] = { 0.152f, -0.834f, -0.633f, -0.473f };
  206.    int ldc = 1;
  207.    float C_expected[] = { 1.08642f, -0.113853f, 0.234826f, -0.48289f };
  208.    cblas_chemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
  209.    {
  210.      int i;
  211.      for (i = 0; i < 2; i++) {
  212.        gsl_test_rel(C[2*i], C_expected[2*i], flteps, "chemm(case 1557) real");
  213.        gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "chemm(case 1557) imag");
  214.      };
  215.    };
  216.   };
  217.  
  218.  
  219.   {
  220.    int order = 101;
  221.    int side = 141;
  222.    int uplo = 121;
  223.    int M = 1;
  224.    int N = 2;
  225.    double alpha[2] = {0, 0.1};
  226.    double beta[2] = {0, 0.1};
  227.    double A[] = { -0.359, 0.089 };
  228.    int lda = 1;
  229.    double B[] = { -0.451, -0.337, -0.901, -0.871 };
  230.    int ldb = 2;
  231.    double C[] = { 0.729, 0.631, 0.364, 0.246 };
  232.    int ldc = 2;
  233.    double C_expected[] = { -0.0751983, 0.0890909, -0.0558689, 0.0687459 };
  234.    cblas_zhemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
  235.    {
  236.      int i;
  237.      for (i = 0; i < 2; i++) {
  238.        gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zhemm(case 1558) real");
  239.        gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zhemm(case 1558) imag");
  240.      };
  241.    };
  242.   };
  243.  
  244.  
  245.   {
  246.    int order = 102;
  247.    int side = 141;
  248.    int uplo = 121;
  249.    int M = 1;
  250.    int N = 2;
  251.    double alpha[2] = {0, 0.1};
  252.    double beta[2] = {0, 0.1};
  253.    double A[] = { 0.044, -0.496 };
  254.    int lda = 1;
  255.    double B[] = { -0.674, 0.281, 0.366, 0.888 };
  256.    int ldb = 1;
  257.    double C[] = { -0.9, 0.919, 0.857, -0.049 };
  258.    int ldc = 1;
  259.    double C_expected[] = { -0.0931364, -0.0929656, 0.0009928, 0.0873104 };
  260.    cblas_zhemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
  261.    {
  262.      int i;
  263.      for (i = 0; i < 2; i++) {
  264.        gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zhemm(case 1559) real");
  265.        gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zhemm(case 1559) imag");
  266.      };
  267.    };
  268.   };
  269.  
  270.  
  271.   {
  272.    int order = 101;
  273.    int side = 142;
  274.    int uplo = 121;
  275.    int M = 1;
  276.    int N = 2;
  277.    double alpha[2] = {0, 0};
  278.    double beta[2] = {0, 0.1};
  279.    double A[] = { -0.314, 0.115, 0.114, 0.878, 0.961, -0.224, 0.973, 0.771 };
  280.    int lda = 2;
  281.    double B[] = { 0.5, -0.016, -0.5, 0.149 };
  282.    int ldb = 2;
  283.    double C[] = { -0.054, 0.064, 0.02, 0.245 };
  284.    int ldc = 2;
  285.    double C_expected[] = { -0.0064, -0.0054, -0.0245, 0.002 };
  286.    cblas_zhemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
  287.    {
  288.      int i;
  289.      for (i = 0; i < 2; i++) {
  290.        gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zhemm(case 1560) real");
  291.        gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zhemm(case 1560) imag");
  292.      };
  293.    };
  294.   };
  295.  
  296.  
  297.   {
  298.    int order = 102;
  299.    int side = 142;
  300.    int uplo = 121;
  301.    int M = 1;
  302.    int N = 2;
  303.    double alpha[2] = {0, 0};
  304.    double beta[2] = {0, 0.1};
  305.    double A[] = { 0.186, 0.578, 0.797, -0.957, -0.539, -0.969, -0.21, 0.354 };
  306.    int lda = 2;
  307.    double B[] = { 0.641, -0.968, 0.15, -0.569 };
  308.    int ldb = 1;
  309.    double C[] = { -0.556, -0.9, 0.197, 0.31 };
  310.    int ldc = 1;
  311.    double C_expected[] = { 0.09, -0.0556, -0.031, 0.0197 };
  312.    cblas_zhemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
  313.    {
  314.      int i;
  315.      for (i = 0; i < 2; i++) {
  316.        gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zhemm(case 1561) real");
  317.        gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zhemm(case 1561) imag");
  318.      };
  319.    };
  320.   };
  321.  
  322.  
  323.   {
  324.    int order = 101;
  325.    int side = 141;
  326.    int uplo = 122;
  327.    int M = 1;
  328.    int N = 2;
  329.    double alpha[2] = {1, 0};
  330.    double beta[2] = {1, 0};
  331.    double A[] = { 0.323, 0.641 };
  332.    int lda = 1;
  333.    double B[] = { -0.188, 0.091, -0.235, 0.523 };
  334.    int ldb = 2;
  335.    double C[] = { 0.919, 0.806, 0.823, -0.94 };
  336.    int ldc = 2;
  337.    double C_expected[] = { 0.858276, 0.835393, 0.747095, -0.771071 };
  338.    cblas_zhemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
  339.    {
  340.      int i;
  341.      for (i = 0; i < 2; i++) {
  342.        gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zhemm(case 1562) real");
  343.        gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zhemm(case 1562) imag");
  344.      };
  345.    };
  346.   };
  347.  
  348.  
  349.   {
  350.    int order = 102;
  351.    int side = 141;
  352.    int uplo = 122;
  353.    int M = 1;
  354.    int N = 2;
  355.    double alpha[2] = {1, 0};
  356.    double beta[2] = {1, 0};
  357.    double A[] = { -0.688, 0.915 };
  358.    int lda = 1;
  359.    double B[] = { 0.914, -0.204, 0.205, -0.476 };
  360.    int ldb = 1;
  361.    double C[] = { 0.27, -0.628, -0.079, 0.507 };
  362.    int ldc = 1;
  363.    double C_expected[] = { -0.358832, -0.487648, -0.22004, 0.834488 };
  364.    cblas_zhemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
  365.    {
  366.      int i;
  367.      for (i = 0; i < 2; i++) {
  368.        gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zhemm(case 1563) real");
  369.        gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zhemm(case 1563) imag");
  370.      };
  371.    };
  372.   };
  373.  
  374.  
  375.   {
  376.    int order = 101;
  377.    int side = 142;
  378.    int uplo = 122;
  379.    int M = 1;
  380.    int N = 2;
  381.    double alpha[2] = {0, 1};
  382.    double beta[2] = {0, 0.1};
  383.    double A[] = { 0.681, 0.574, -0.425, -0.64, 0.792, 0.661, -0.009, 0.005 };
  384.    int lda = 2;
  385.    double B[] = { -0.221, 0.554, -0.465, -0.95 };
  386.    int ldb = 2;
  387.    double C[] = { 0.331, -0.958, -0.826, -0.972 };
  388.    int ldc = 2;
  389.    double C_expected[] = { 0.778291, 0.142269, -0.496199, 0.112747 };
  390.    cblas_zhemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
  391.    {
  392.      int i;
  393.      for (i = 0; i < 2; i++) {
  394.        gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zhemm(case 1564) real");
  395.        gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zhemm(case 1564) imag");
  396.      };
  397.    };
  398.   };
  399.  
  400.  
  401.   {
  402.    int order = 102;
  403.    int side = 142;
  404.    int uplo = 122;
  405.    int M = 1;
  406.    int N = 2;
  407.    double alpha[2] = {0, 1};
  408.    double beta[2] = {0, 0.1};
  409.    double A[] = { 0.959, 0.34, -0.23, 0.064, 0.516, -0.275, 0.714, 0.899 };
  410.    int lda = 2;
  411.    double B[] = { -0.502, -0.987, -0.134, 0.215 };
  412.    int ldb = 1;
  413.    double C[] = { 0.929, 0.181, -0.16, -0.921 };
  414.    int ldc = 1;
  415.    double C_expected[] = { 0.986459, -0.371458, -0.320548, -0.059384 };
  416.    cblas_zhemm(order, side, uplo, M, N, alpha, A, lda, B, ldb, beta, C, ldc);
  417.    {
  418.      int i;
  419.      for (i = 0; i < 2; i++) {
  420.        gsl_test_rel(C[2*i], C_expected[2*i], dbleps, "zhemm(case 1565) real");
  421.        gsl_test_rel(C[2*i+1], C_expected[2*i+1], dbleps, "zhemm(case 1565) imag");
  422.      };
  423.    };
  424.   };
  425.  
  426.  
  427. }
  428.